Skip to content

feat(resource-policies): add statement evaluator - #6892

Open
TheodoreSpeaks wants to merge 5 commits into
feat/workspace-principalfrom
feat/credential-group-resource-policies
Open

feat(resource-policies): add statement evaluator#6892
TheodoreSpeaks wants to merge 5 commits into
feat/workspace-principalfrom
feat/credential-group-resource-policies

Conversation

@TheodoreSpeaks

@TheodoreSpeaks TheodoreSpeaks commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • replace credential group grants with statement-based resource policies supporting explicit allow/deny and bounded IAM-style conditions
  • bind persisted execution principals and current workflow authority into credential-use decisions, while keeping actor-owned credential access as a hidden system rule
  • add a raw JSON policy editor plus trigger-owned policy lifecycle and a bounded backfill

Type of Change

  • New feature

Testing

  • bun run lint
  • bun run type-check
  • bun run check:audits
  • bun run check:migrations origin/staging
  • 67 database tests and 221 focused application/workflow tests

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel

vercel Bot commented Aug 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docs Ready Ready Preview Aug 23, 2026 8:49pm

Request Review

@cursor

cursor Bot commented Aug 20, 2026

Copy link
Copy Markdown

PR Summary

High Risk
Changes authorization for managed OAuth credentials and internal executor delegation, including policy evaluation, deployment-version binding, and token issuance. Mis-evaluation could over- or under-grant credential access.

Overview
Replaces enrollment-only Credential Group token checks with stored IAM-style resource policies (allow/deny, principals, flat conditions) plus a hidden actor-own system rule. Admins can edit the full policy as JSON; credential use is policy-gated while listing stays discovery-only.

Adds a required per-group policy lifecycle (create/delete/backfill), optimistic-concurrency admin GET/PUT, and a settings Access tab. Credential use now evaluates credential_groups.credentials.use with explicit-deny precedence.

Threads current workflow (draft vs active deployment version) through executor delegation and child-workflow execution so workflow principals and sim:WorkflowMode conditions bind to the child, not the root. Deployed state APIs now require deploymentVersionId; stale or cross-workspace child authority fails closed.

Reviewed by Cursor Bugbot for commit a01a557. Bugbot is set up for automated code reviews on this repo. Configure here.

@TheodoreSpeaks
TheodoreSpeaks force-pushed the feat/credential-group-resource-policies branch from 9995853 to 0c9fb23 Compare August 20, 2026 18:12
@greptile-apps

greptile-apps Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Adds versioned allow-only access policies for Credential Groups and propagates deployed-workflow authority through nested execution.

  • Adds policy persistence, optimistic revisions, contracts, management operations, and admin access APIs.
  • Adds an Access settings tab for workflow, workspace-role, and Access Control Group grants.
  • Carries current workflow and deployment-version authority through internal delegation and nested workflow execution.
  • Adds focused authorization, persistence, route, contract, and executor tests.

Confidence Score: 5/5

The PR appears safe to merge because no eligible blocking failure remains in the follow-up review.

No blocking failure remains.

Important Files Changed

Filename Overview
apps/sim/lib/resource-policies/authorization.ts Evaluates allow-only policy subjects against canonical workspace and delegated workflow execution context.
apps/sim/lib/resource-policies/repository.ts Persists one policy per resource using atomic optimistic-revision inserts and updates.
apps/sim/lib/credential-groups/application/manage-access.ts Adds authorized read and replacement-update operations for Credential Group access grants.
apps/sim/lib/auth/internal-delegation.ts Binds delegated current-workflow authority to canonical workspace and deployment state.
apps/sim/executor/handlers/workflow/workflow-handler.ts Propagates draft or deployed child-workflow authority through nested execution.
apps/sim/ee/credential-groups/components/credential-group-access.tsx Adds the administrative UI for listing, adding, and removing explicit access grants.
packages/db/migrations/0298_sparkling_hemingway.sql Introduces resource-policy persistence and uniqueness constraints aligned with the schema.

Sequence Diagram

sequenceDiagram
  participant Admin as Workspace Admin
  participant API as Credential Group Access API
  participant Policy as Resource Policy Store
  participant Exec as Workflow Executor
  participant Auth as Delegation Binding
  participant Cred as Credential Resolver

  Admin->>API: PUT explicit grants + expected revision
  API->>Policy: Validate subjects and replace policy
  Policy-->>API: New revision and grants
  Exec->>Auth: Delegated principal + current workflow authority
  Auth->>Auth: Bind workspace and deployment version
  Exec->>Cred: Request managed credential
  Cred->>Policy: Evaluate actor default and explicit grants
  Policy-->>Cred: Allow or deny credential use
Loading

Reviews (3): Last reviewed commit: "test(resource-policies): cover actor gra..." | Re-trigger Greptile

Comment thread apps/sim/ee/credential-groups/components/credential-group-access.tsx Outdated
@TheodoreSpeaks
TheodoreSpeaks force-pushed the feat/credential-group-resource-policies branch from aaea6ae to 52e3168 Compare August 21, 2026 00:17
@TheodoreSpeaks
TheodoreSpeaks force-pushed the feat/credential-group-resource-policies branch 2 times, most recently from 95eafd9 to 9d5f513 Compare August 21, 2026 01:41
@TheodoreSpeaks
TheodoreSpeaks force-pushed the feat/credential-group-resource-policies branch 2 times, most recently from c2d891e to 64f547f Compare August 21, 2026 01:53
Comment thread packages/db/migrations/0298_sparkling_hemingway.sql Outdated
throw new OrchestrationError('conflict', error.message)
}
throw error
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Duplicate grants become server errors

Low Severity

updateCredentialGroupAccessBodySchema accepts duplicate subjects or grant ids, and only parseResourcePolicyDocument rejects them later. That failure is a raw Zod/Error rather than an OrchestrationError, so the access route maps it to a generic 500 instead of a validation response.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 64f547f. Configure here.

@TheodoreSpeaks
TheodoreSpeaks force-pushed the feat/credential-group-resource-policies branch from 64f547f to eccb03a Compare August 21, 2026 04:47
@TheodoreSpeaks

Copy link
Copy Markdown
Collaborator Author

@greptile

@TheodoreSpeaks

Copy link
Copy Markdown
Collaborator Author

@cursor review

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

3 issues from previous reviews remain unresolved.

Fix All in Cursor

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit eccb03a. Configure here.

@TheodoreSpeaks
TheodoreSpeaks force-pushed the feat/credential-group-resource-policies branch from eccb03a to ede2aba Compare August 21, 2026 05:07
@TheodoreSpeaks

Copy link
Copy Markdown
Collaborator Author

@greptile

@TheodoreSpeaks

Copy link
Copy Markdown
Collaborator Author

@cursor review

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

There are 5 total unresolved issues (including 3 from previous reviews).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ede2aba. Configure here.

queryClient.invalidateQueries({
queryKey: credentialGroupKeys.access(variables.workspaceId, variables.groupId),
}),
})

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale revision on rapid access edits

Medium Severity

useUpdateCredentialGroupAccess only invalidates the access query after settle and never writes the mutation response into the cache. saveGrants keeps sending expectedRevision from the last fetched policy, so a second remove or add that starts before refetch finishes uses a stale revision and hits a conflict even though the first save succeeded.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit ede2aba. Configure here.

Comment thread apps/sim/lib/api/contracts/credential-groups.ts
@TheodoreSpeaks TheodoreSpeaks changed the title feat(credential-groups): add resource access policies feat(resource-policies): add statement evaluator Aug 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant